package com.dps.metrics.factory;


import com.dps.metrics.metadata.MetricsMetadata;
import com.dps.metrics.type.Counter;
import com.dps.metrics.type.Gauge;
import com.dps.metrics.type.Timer;

import java.util.Map;

public interface MetricsFactory {
    default Counter createCounter(String name, Map<String, String> tags) {
        return this.createCounter(name, tags, "");
    }

    default Timer createTimer(String name, Map<String, String> tags) {
        return this.createTimer(name, tags, "");
    }

    default Gauge createGauge(String name, Map<String, String> tags) {
        return this.createGauge(name, tags, "");
    }

    default Counter createCounter(MetricsMetadata metricsMetadata, Map<String, String> tags) {
        return this.createCounter(metricsMetadata.key(), tags, metricsMetadata.help());
    }

    default Timer createTimer(MetricsMetadata metricsMetadata, Map<String, String> tags) {
        return this.createTimer(metricsMetadata.key(), tags, metricsMetadata.help());
    }

    default Gauge createGauge(MetricsMetadata metricsMetadata, Map<String, String> tags) {
        return this.createGauge(metricsMetadata.key(), tags, metricsMetadata.help());
    }

    Counter createCounter(String var1, Map<String, String> tags, String help);

    Timer createTimer(String var1, Map<String, String> tags, String help);

    Gauge createGauge(String var1, Map<String, String> tags, String help);
}
